package com.lonely.fx;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.*;
import javafx.stage.Stage;


/**
 * @author 独孤小标
 * @description 快捷键设置
 * @since 2022/6/27 9:21 上午
 */
public class HotKeySettingMain extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    /**
     *
     */
    @Override
    public void start(Stage primaryStage) throws Exception {

        //创建一个按钮，设置快捷键
        Button b1 = new Button("b1");
        b1.setPrefWidth(200);
        b1.setPrefHeight(200);
        Group group = new Group();
        group.getChildren().add(b1);
        Scene scene = new Scene(group);

        b1.setOnAction(event -> {
            System.out.println("触发按钮事件");


        });

//        b1.setOnKeyPressed(event -> {
//            KeyCode code = event.getCode();
//            System.out.println(code.getName());
//        });

        //1. 第一种设置快捷键方式，绑定在scene上,感觉对于mac系统支持不友好，不支持 control和alt键
        KeyCombination keyCombination = new KeyCodeCombination(KeyCode.A,KeyCombination.SHORTCUT_DOWN);
        //将按钮和快捷键绑定
        Mnemonic mnemonic = new Mnemonic(b1,keyCombination);
        //添加到scene上
        scene.addMnemonic(mnemonic);

        //2. 第二种设置快捷键方式--不常用
        KeyCharacterCombination keyCharacterCombination = new KeyCharacterCombination("c", KeyCombination.SHORTCUT_DOWN);
        Mnemonic mnemonic1 = new Mnemonic(b1, keyCharacterCombination);
        scene.addMnemonic(mnemonic1);

        //3. 第三种设置快捷键方式--方便，常用,且不需要绑定固定的组件
        KeyCombination combination = new KeyCodeCombination(KeyCode.T,KeyCombination.SHORTCUT_DOWN);
        scene.getAccelerators().put(combination, () -> {
            //1. 可以把触发按钮后的处理逻辑写入到这里,比如封装成一个方法来调用
            //this.callXX();

            //2. 也可以直接调用指定组件的触发服务
            b1.fire();
        });



        primaryStage.setScene(scene);
        primaryStage.setWidth(500);
        primaryStage.setHeight(500);
        primaryStage.show();
    }
}
